/**
 ***********************************************************************************************************
 * 
 ***********************************************************************************************************
 * @file RBD3D9IndexBuffer.h
 ***********************************************************************************************************/

#ifndef __RBD3D9INDEXBUFFER_H__
#define __RBD3D9INDEXBUFFER_H__

#ifdef  HEADER_ONCE
#pragma HEADER_ONCE
#endif

#ifdef  HEADER_MSG
#pragma HEADER_MSG(RBD3D9IndexBuffer.h)
#endif

/***********************************************************************************************************
 * Includes
 ***********************************************************************************************************/
#include <RBMain/RBIndexBuffer.h>

/***********************************************************************************************************
 * Forward declarations
 ***********************************************************************************************************/
interface IDirect3DIndexBuffer9;
class RBD3D9Renderer;

/***********************************************************************************************************
 * Classes
 ***********************************************************************************************************/

class RBD3D9IndexBuffer : public RBIndexBuffer
{
    RBDeclareRTTI(RBD3D9IndexBuffer, RBIndexBuffer);
public:
                            RBD3D9IndexBuffer    (uint32 uiUsage, RBIndexBufferType::EType eIndexType, RBHardwareBufferManager* pCreator, uint32 uiIndexCount, const void* pInitData);
    virtual                ~RBD3D9IndexBuffer    ();

    IDirect3DIndexBuffer9*  GetIB               ();

    // Function to retrieve data from GPU to CPU
    virtual void*           Map                 (MapType eMapType);
    virtual void            Unmap               ();

    virtual void            OnReset             (bool bBeforeReset);

private:
    IDirect3DIndexBuffer9*  m_pD3DIB;

};

/**************************************************************************************************************************************************************
 * 
 **************************************************************************************************************************************************************/
inline IDirect3DIndexBuffer9* RBD3D9IndexBuffer::GetIB()
{
    return m_pD3DIB;
}

/***********************************************************************************************************/

#endif // __RBD3D9INDEXBUFFER_H__